package org.jiajie.coffeecodes.aop;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * JDK 动态代理模拟
 *
 * @author jie
 */
public class TimeHandler implements InvocationHandler {

    // 目标对象
    private Object targetObject;

    public TimeHandler(Object targetObject) {
        this.targetObject = targetObject;
    }

    /**
     * 关联的这个实现类的方法被调用时将被执行
     *
     * @param proxy     表示代理
     * @param method    表示原对象被调用的方法
     * @param args  表示方法的参数
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        Object ret = null;
        try {
            System.out.println("time方法之前：" + System.currentTimeMillis());
            // 调用目标方法
            ret = method.invoke(targetObject, args);
            System.out.println("time方法之后：" + System.currentTimeMillis());
        } catch (Exception e){
            e.printStackTrace();
            System.out.println("error");
            throw e;
        }
        return ret;
    }
}
